#+title: Introducción a Org-roam
#+author: dlmayhem
#+date: 14 de octubre de 2023
#+email: dlmayhem@riseup.net
#+language: es
#+options: ':t toc:nil

* Presentación

[[https://www.orgroam.com][Org-roam]] es un sistema basado en texto plano para la gestión de conocimiento. Está inspirado en el método [[https://en.wikipedia.org/wiki/Zettelkasten][Zettelkasten]] y funciona sobre la base del poderoso editor [[https://emacs.org][GNU Emacs]] y el [[https://orgmode.org/][Modo Org]]. En esta breve e incompleta charla, revisaremos algunas de sus características principales y alguna configuración básica orientada a obtener una mayor productividad.

#+attr_html: :width 660
#+attr_latex: :width 1\textwidth
[[./org-roam.jpeg]]

* Herramientas

** GNU Emacs

- Editor de texto plano.
- Parte del sistema operativo [[https://gnu.org][GNU]].
- Escrito en C y Lisp, extensible mediante el lenguaje Emacs Lisp.
- Software libre bajo la licencia [[https://www.gnu.org/licenses/gpl-3.0.html][GPL v3]].

*** Instalación

- Debian :: =# apt install emacs=
- Void :: =# xbps-install emacs-gtk3=

** Modo Org

- El [[https://orgmode.org][Modo Org]] es un modo mayor de Emacs.
- Presentado en el paper [[https://www.jstatsoft.org/article/view/v046i03][A Multi-Language Computing Environment for Literate Programming and Reproducible Research]].
- Tomar notas, realizar listas TODO, evaluar código, etc.
- Software libre bajo  la licencia [[https://www.gnu.org/licenses/gpl-3.0.html][GPL v3]].
- Viene implementado por defecto en una instalación estándar de Emacs.

** Org-roam

- [[https://www.orgroam.com][Org-roam]] es un sistema de notas no jerárquicas basado en las características de /Roam Research/.
- Agrega nuevas características al modo Org, aumentando su sintáxis.
- Algunas de sus características:
  - Privacidad y seguridad.
  - Texto plano.
  - Libre bajo licencia [[https://www.gnu.org/licenses/gpl-3.0.html][GPL v3]].
  - Construído sobre Emacs.
- Una buena [[https://yewtu.be/watch?v=AyhPmypHDEw&listen=false][introducción a Org-roam]] (en inglés) se puede encontrar en el canal [[https://systemcrafters.net/][System Crafters]] de [[https://daviwil.com/][David Wilson]].
    
* Método Zettelkasten

- Atribuído al sociólogo alemán Niklas Luhmann.
- Hace énfasis en conectar las ideas de manera no jerárquica.
- Consiste en notas breves en tarjetas, interconectadas entre sí mediante un ID en la esquina de la misma nota.

** Notas fugaces

- Notas rápidas con información que en un futuro puede ser utilizada o desechada.
- Normalmente hace uso de =org-capture= o usa la funcionalidad =org-roam-dailies= de Org-roam.

** Notas permanentes

- Se dividen en dos categorías.
  - Notas literarias :: Anotaciones breves sobre una fuente en particular --libros, webs, papers-- a las que quieres tener acceso posteriormente.
  - Notas conceptuales :: Deben ser auto explicativas y detalladas.

* Método tradicional vs. Zettelkasten

- Método tradicional :: Consiste en almacenar las notas en directorios  jerárquicos, divididos por área temática, autor, etc.
- Método Zettelkasten :: Consiste en almacenar todas las notas en el mismo directorio y relacionarlas entre ellas utilizando --en el caso de Org-roam-- hipervínculos, logrando algo así como una wiki de conocimiento personal.

* Configuración básica

- Las siguientes líneas de código pueden ser agregadas al archivo de configuración de Emacs.
- La ruta donde se almacenan las notas tomadas con Org-roam es en este ejemplo =~/org/roam/=, pero puede ser reemplazada por cualquier otra.
- Se recomienda utilizar un directorio exclusivo para las notas de Org-roam, y no mezclarlas con los demás archivos =.org= que almacenamos.

#+begin_src elisp
  (use-package org-roam
    :ensure t
    :init
    (setq org-roam-v2-ack t)
    :custom
    (org-roam-directory (file-truename "~/org/roam"))
    :bind (("C-c n l" . org-roam-buffer-toggle)
           ("C-c n f" . org-roam-node-find)
           ("C-c n i" . org-roam-node-insert))
    :config
    (org-roam-setup)
#+end_src

* Org-Roam-UI

- [[https://github.com/org-roam/org-roam-ui][Org-Roam-UI]] es un frontend gráfico que nos permite visualizar nuestras notas y las relaciones entre ellas de una manera más comprensible.
- Una configuración básica:

#+begin_src elisp
  (use-package org-roam-ui
    :after org-roam
    :config
    (setq org-roam-ui-sync-theme t
          org-roam-ui-follow t
          org-roam-ui-update-on-save t
          org-roam-ui-open-on-start t))
#+end_src

* Templates

- Nuevamente, podemos encontrar una [[https://yewtu.be/watch?v=YxgA5z2R08I][introducción al sistema de templates de Org-roam]] (en inglés) en el canal de [[https://systemcrafters.net/][System Crafters]].
- Mis templates son almacenados en la ruta =~/.emacs.d/templates/roam/= y pueden ser revisados [[https://notabug.org/dlmayhem/terror-emacs/src/master/templates/roam][acá]].
- Agrego esto en mi archivo de configuración de Emacs para llamar a los templates:
  
#+begin_src elisp
  (org-roam-capture-templates
   '(("a" "Author" plain
      (file "~/.emacs.d/templates/roam/author.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)
     ("b" "Bibliography" plain
      (file "~/.emacs.d/templates/roam/biblio.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)
     ("c" "Concept" plain
      (file "~/.emacs.d/templates/roam/concept.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)
     ("d" "Default" plain
      "%?"
      :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
      :unnarrowed t)
     ("f" "Field" plain
      (file "~/.emacs.d/templates/roam/field.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)
     ("q" "Quote" plain
      (file "~/.emacs.d/templates/roam/quote.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)))
#+end_src

* Alternativas

** Libres

- [[https://protesilaos.com/emacs/denote][Denote]], desarrollado por [[https://protesilaos.com/][Protesilaos Stavrou]].
- [[https://logseq.org/][Logseq]], una alternativa gráfica y fácil de utilizar.

** Privativas (no recomendadas)

- Obsidian
- Roam Research
- Notion
